Сделал что хотел.
В общем есть такой онлайновый многоязычный словарь с фразами https://abc.times.lv. Но бесплатная версия выдаёт только слово за раз. Как-то раз мне стукнула в голову мысль создать хитроумный скрипт. Действует он так:
1)Пользователь на моём сайте запрашивает слово для перевода, то есть передаёт его моему скрипту.
2)Скрипт обращается на abc.times.lv, скармливает это слово тамошнему словарю, и узнаёт сколько страниц со словами-результатами получилось
3)Скрипт качает все эти страницы по порядку, и выводит в одном окне, красиво и без рекламы
Однако, такой механизм, реализованный на языке PHP (который я вообще не знаю, кстати) совершенно безбожно тормозил. Ещё бы! Чтобы такое проделать, скрипту надо скачать от 10 до 150 страниц размером 50 КБ, причём делается последовательно, а не параллельно.
В итоге страница грузилась минуту, и я на такую идею забил. Сырая версия для латышского языка, впрочем, до сих пор валяется вот тут. Слово abols (яблоко) с 34 вариантами перевода грузится 42-70 секунд.
Уже тогда появилась мысль грузить страницы параллельно, как это делают современные менеджеры закачек вроде FlashGet, загружающие одновременно разные части скачиваемого файла. Но на PHP возможность это сделать колеблется от "трудно" до "невозможно" в зависимости от условий хостинга.
Поэтому сейчас, когда руки дошли оценить среду разработки ASP.NET, решил реализовать идейку.
В итоге получилась ASP.NET программа на C#, запущенная на моём домашнем компе.
Поддерживается пока что только латышско-русский словарь.
Работает новый алгоритм так:
1)Качает первую страницу, узнаёт, сколько будет всего страниц.
2)Создаёт столько потоков (threads), сколько страниц, и заставляет каждый поток качать свою страницу. В итоге всё скачивается более-менее одновременно.
3)Выводит результат.
Затрачиваемое время - 25-30с. Увы, выигрыш почему-то невелик. Впрочем, сравнивать не очень корректно, потому как запускалось это на совершенно разных компьютерахв разных местах.
Из интереса сделал вариант, работающий по-старому. Время стало сравнимо с вариантом на PHP, что логично, ведь упирается всё в скорость скачивания, а не исполнения программы.
В общем, пользоватся пока нельзя. Следующий логичный шаг - сделать кэширование слов. Но это станет уже крайней стадией нарушения копирайтов, и в открытый доступ такое выложить не получится.
Good news, everyone! Big and dull programming article follows!
2006-03-16